// Example ÉNÉâÉXÇÃÉwÉbÉ_ÉtÉ@ÉCÉã
// MyClass.h
class MyClass {
public:
MyClass() { mMovie = NULL; };
virtual ~MyClass();
protected:
void InstallMovieDrawingComplete(Movie inMovie,
long inFlags = movieDrawingCallAlways);
virtual OSErr DrawingCompleteDoSomething(Movie theMovie) { return noErr; };
private:
/* ÉÄÅ[ÉrÅ[ï`âÊÇÃäÆóπéûÇ…åƒÇ—èoÇ≥ÇÍÇÈ
typedef OSErr (*MovieDrawingCompleteProcPtr) (Movie theMovie, long refCon);
*/
static pascal OSErr MyClassMovieDrawingCompleteProc(Movie theMovie, long refCon);
static MovieDrawingCompleteUPP sMovieDrawingCompleteUPP;
Movie mMovie;
};
// Example ÉNÉâÉXÇÃé¿ëï
// MyClass.cpp
MovieDrawingCompleteUPP MyClass::sMovieDrawingCompleteUPP = NULL;
pascal OSErr MyClass::MyClassMovieDrawingCompleteProc(Movie theMovie, long refCon)
{
MyClass *instance = reinterpret_cast<MyClass *>(refCon);
OSErr err = noErr;
if (instance)
err = instance->DrawingCompleteDoSomething(theMovie);
return err;
}
MyClass::~MyClass()
{
if (mMovie) ::SetMovieDrawingCompleteProc(mMovie, 0, NULL, 0L);
if (sMovieDrawingCompleteUPP)
::DisposeMovieDrawingCompleteUPP(sMovieDrawingCompleteUPP);
}
/*
inFlags: movieDrawingCallWhenChanged
ÉÄÅ[ÉrÅ[Ç™ïœçXÇ≥ÇÍÇΩÇΔÇ´ÇÃÇ›ÅAÉcÅ[ÉãÉ{ÉbÉNÉXÇ™ï`âÊäÆóπä÷êîÇåƒÇ—èoÇ∑ÇÊǧDžéwíËÇ∑ÇÈ
movieDrawingCallAlways
ÉcÅ[ÉãÉ{ÉbÉNÉXÇ…ëŒÇµÇƒÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ MoviesTask ÇåƒÇ—èoÇ∑ÇΩÇ—Ç…ï`âÊäÆóπä÷êîÇåƒÇ—èoÇ∑ÇÊǧDžéwíËÇ∑ÇÈ
*/
void MyClass::InstallMovieDrawingComplete(Movie inMovie, long inFlags)
{
if (NULL == MyClass::sMovieDrawingCompleteUPP) {
MyClass::sMovieDrawingCompleteUPP =
::NewMovieDrawingCompleteUPP(MyClass::MyClassMovieDrawingCompleteProc);
}
if (inMovie) {
if (mMovie) {
// ëOÇÃÉÄÅ[ÉrÅ[ÇÃÉRÅ[ÉãÉoÉbÉNÇéÊÇËèúÇ≠
::SetMovieDrawingCompleteProc(mMovie, 0, NULL, 0L);
}
::SetMovieDrawingCompleteProc(inMovie, inFlags,
MyClass::sMovieDrawingCompleteUPP,
long(this));
mMovie = inMovie;
}
}
|